/**
 * 在这里定义和用户相关的路由处理函数，供 /router/user.js 模块进行调用
 */
//导入数据库操作模块
const db = require('../db/index')
//导入 bcryptjs包
const bcrypt = require('bcryptjs')
//导入生成token的包
const jwt = require('jsonwebtoken')
// 导入全局配置文件
const config = require('../config')

const gravatar = require('gravatar')
//注册
exports.reguser = (req, res) => {
    //查询数据库是否已经有邮箱
    const userinfo = req.body
    const sql = 'select * from user where email=?'
    db.query(sql, userinfo.email, (err, results) => {
        if (err) {
            return res.cc(err)
        }
        if (results.length > 0) {
            return res.cc('邮箱已被注册')
        }
        const avatar = gravatar.url(userinfo.email, {
            s: '200',
            r: 'pg',
            d: 'mm'
        })
        userinfo.password = bcrypt.hashSync(userinfo.password, 10)
        const sql = 'insert into user set ?'
        db.query(sql, {
            name: userinfo.name,
            email: userinfo.email,
            password: userinfo.password,
            avatar,
            identity: userinfo.identity
        }, (err, results) => {
            if (err) {
                return res.cc(err)
            }
            if (results.affectedRows !== 1) {
                return res.send({
                    status: 1,
                    message: '注册用户失败，请稍后再试！'
                })
            }
            res.cc('注册成功！', 0)
        })
    })
}

//登录
exports.login = (req, res) => {
    const userinfo = req.body
    const sql = 'select * from user where email=?'
    db.query(sql, userinfo.email, (err, results) => {
        //执行SQL失败
        if (err) {
            return res.cc()
        }
        //执行SQL成功，但没获取到数据条数
        if (results.length !== 1) {
            return res.cc('用户不存在！')
        } else {
            //登录成功
            //在服务器中生成token字符串
            const compareResult = bcrypt.compareSync(userinfo.password, results[0].password)
            if (!compareResult) {
                return res.cc('密码错误！')
            } else {
                //登录成功
                //在服务器中生成token字符串
                const user = {
                    ...results[0],
                    password: '',
                }
                console.log(results[0]);
                // 生成 Token 字符串
                const tokenStr = jwt.sign(user, config.jwtSecretKey, {
                    expiresIn: '10h', // token 有效期为 10 个小时
                })
                //将token响应给客户端
                res.send({
                    status: 0,
                    message: '登录成功！',
                    // 为了方便客户端使用 Token，在服务器端直接拼接上 Bearer 的前缀
                    token: 'Bearer ' + tokenStr,
                })
            }
        }
    })
}

//查询邮箱是否被注册
exports.email = (req, res) => {
    const sql = 'select * from user where email=?'
    db.query(sql, req.body.email, (err, results) => {
        if (err) {
            return res.cc(err)
        }

        if (results.length > 0) {
            return res.cc('邮箱已被注册', 1)
        } else {
            return res.cc('邮箱可以使用', 0)
        }
    })
}